/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package infoplaces2;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import support.Ponto;
import plot.PlotIntegration;

/**
 *
 * @author andre
 */
public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        
        String takenPhoto = "foto_tirada.jpg";
        
        File fileName = new File(takenPhoto);
        
        
        /* Pensando na aplicação como um todo, takenPhoto precisa ser obtido de
        forma automática ao se tirar uma foto, ou então após a ação de uma escolha de
        foto do usuário da sua galeria de fotos - ANDROID.
        */
        Photo photo = new Photo(fileName);
        //Foi instanciado um objeto de Photo, ele tem as informações de latitude e longitude.
        
        //ps.: Não precisa verificar se conseguiu ou não aqui as informações do GPS,
        //pois Photo levanta excessão se nao conseguir pegar essas informações
        
        
        /*Dado que já tenho uma PHOTO, é só começar a busca, chamando o InfoPlaces2*/
        InfoPlaces2 info = new InfoPlaces2();
        ArrayList<ProcessedStreetNode> winners = new ArrayList<>();
        ArrayList<ProcessedStreetNode> listProcessedStreetNode = new ArrayList<>(); //lista para armazenar todos os nós processados, para depois fazer o plot
        int n =2;
        Ponto target = info.run(listProcessedStreetNode, winners, photo, n); //aqui é feita a triangulação
        plot(listProcessedStreetNode, winners, target);
        
    }

    
    private static void plot(ArrayList<ProcessedStreetNode> listProcessedStreetNode, ArrayList<ProcessedStreetNode> winners, Ponto alvo) {
        boolean winnerBollean;

        for (ProcessedStreetNode processedStreetNode : listProcessedStreetNode) {
            String id = (String) processedStreetNode.getStreetNode().getID();
            winnerBollean = id.equals(winners.get(0).getStreetNode().getID()) || id.equals(winners.get(1).getStreetNode().getID());

            double grauComMaisMatches = processedStreetNode.getHistograma() == null ? 0 : processedStreetNode.getDegreeMaximum();
            PlotIntegration.save(id, processedStreetNode.getStreetNode().getNeighbours(), processedStreetNode.getStreetNode().getLatitude(), processedStreetNode.getStreetNode().getLongitude(), grauComMaisMatches, winnerBollean);
        }
        
        PlotIntegration.save("t", new ArrayList(), alvo.get_y(), alvo.get_x(), 0, true);
        PlotIntegration.createPlote();

    }
}
